﻿namespace PrintProperties.MGLHPM.Entity
{
    /// <summary>
    /// Class that encapsulates the formats to use.
    /// </summary>
    public class Format
    {
        /// <summary>
        /// Default Datetime Format {0:dd/MM/yyyy HH:mm:ss}
        /// </summary>
        public const string DefaultDatetimeFormat = "{0:dd/MM/yyyy HH:mm:ss}";

        /// <summary>
        /// Default Number Format {0:0.##}
        /// </summary>
        public const string DefaultNumberFormat = "{0:0.##}";

        /// <summary>
        /// Default String Format '{0}'
        /// </summary>
        public const string DefaultStringFormat = "'{0}'";

        /// <summary>
        /// Default Boolean Format {0}
        /// </summary>
        public const string DefaultBooleanFormat = "{0}";

        /// <summary>
        /// Default Entity Format {1}@{{{0}}}
        /// </summary>
        public const string DefaultEntityFormat = "{1}@{{{0}}}";

        /// <summary>
        /// Default Collection Format {1}[{0}]
        /// </summary>
        public const string DefaultCollectionFormat = "{1}[{0}]";

        /// <summary>
        /// Default Property Format {0} = {1}, 
        /// </summary>
        public const string DefaultPropertyFormat = "{0} = {1}, ";

        public Format()
        {
            DateTime = DefaultDatetimeFormat;
            Number = DefaultNumberFormat;
            String = DefaultStringFormat;
            Boolean = DefaultBooleanFormat;
            Entity = DefaultEntityFormat;
            Collection = DefaultCollectionFormat;
            Property = DefaultPropertyFormat;
        }
        
        /// <summary>
        /// Format for variables DateTime
        /// </summary>
        public string DateTime { get; set; }

        /// <summary>
        /// Format for Numeric variables.
        /// </summary>
        public string Number { get; set; }
        
        /// <summary>
        /// Format for String variables.
        /// </summary>
        public string String { get; set; }
        
        /// <summary>
        /// Format for Boolean variables.
        /// </summary>
        public string Boolean { get; set; }

        /// <summary>
        /// Format for Entity variables.
        /// </summary>
        public string Entity { get; set; }

        /// <summary>
        /// Format for Collection variables.
        /// </summary>
        public string Collection { get; set; }

        /// <summary>
        /// Format to print the Property.
        /// </summary>
        public string Property { get; set; }
        
    }
}
